delegate
همان طور که می دانید یک متد می تواند چندین پارامتر با نوع های مختلف را یکجا دریافت نماید.مانند عدد صحیح ، اعشاری و یا رشته اما تا کنون به این فکر کرده اید که آیا می شود یک متد را بعنوان پارامتری به متد دیگر تحویل داد .
اگر قصد چنین کاری را دارید ، متدی را که می خواهید بعنوان پارامتر باشد بایستی بصورت delegate تعریف کنید .
برنامه زیر نمونه ای از کاربرد دلیگیت می باشد .
using System;
namespace deligayt
{
class Program
{
public delegate void Print(int value);
static void Main(string[] args)
{
// Print delegate points to PrintNumber
Print printDel = PrintNumber;
printDel(100000);
printDel(200);
// Print delegate points to PrintMoney
printDel = PrintMoney;
printDel(10000);
printDel(200);
Console.ReadLine();
}
public static void PrintNumber(int num)
{
Console.WriteLine("Number: {0,-12:N0}", num);
}
public static void PrintMoney(int money)
{
Console.WriteLine("Money: {0:C}", money);
} } }
یک نمونه برنامه دیگر از نحوه استفاده از دلیگیت :
using System;
delegate int NumberChanger(int n);
namespace DelegateAppl {
class TestDelegate {
static int num = 10;
public static int AddNum(int p) {
num += p;
return num;
}
public static int MultNum(int q) {
num *= q;
return num;
}
public static int getNum() {
return num;
}
static void Main(string[] args) {
//create delegate instances
NumberChanger nc1 = new NumberChanger(AddNum);
NumberChanger nc2 = new NumberChanger(MultNum);
//calling the methods using the delegate objects
nc1(25);
Console.WriteLine("Value of Num: {0}", getNum());
nc2(5);
Console.WriteLine("Value of Num: {0}", getNum());
Console.ReadKey(); } } }
خروجی برنامه بالا بصورت زیر می باشد . - - - - -
Value of Num: 35 Value of Num: 175